package main

import "fmt"

func main() {
	// Go语言改进了 switch 的语法设计，case 与 case 之间是独立的代码块，不需要通过 break
	// 一个case可以包含多个值，使用逗号分隔
	// switch 后的变量类型可以是整数、字符串等各种类型
	// switch 后的变量也可以省略，此时每个 case 后的表达式必须是布尔类型
	var a = 1
	switch a {
	case 1:
		fmt.Println("1")
	case 2, 3:
		fmt.Println("2 or 3")
	default:
		fmt.Println(0)
	}
	// switch 后的变量也可以省略，此时每个 case 后的表达式必须是布尔类型
	var r int = 11
	switch {
	case r > 10 && r < 20:
		fmt.Println(r)
	}

	// 跨越 case 的 fallthrough——兼容C语言的 case 设计
	// fallthrough 必须放在某个 case 的最后一条语句，
	// 执行后立即进入下一个 case 的语句块，不检查下一个 case 的表达式是否为真
	var s = "hello"
	switch {
	case s == "hello":
		fmt.Println("hello")
		fallthrough
	case s != "world":
		fmt.Println("world")
	}
}
